home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / nos042_s / finger.c < prev    next >
C/C++ Source or Header  |  1994-09-16  |  2KB  |  87 lines

  1. /* Internet finger client
  2.  * Copyright 1991 Phil Karn, KA9Q
  3.  */
  4.  
  5. /****************************************************************************
  6. *    $Id: finger.c 1.2 92/09/14 18:02:08 ROOT_DOS Exp Locker: ROOT_DOS $
  7. *    13 Sep 92    1.2        CMS        Make "finger @siteX@siteY" work.            *
  8. *
  9. *    ATARI Version by David Nash - dnash@chaos.demon.co.uk
  10. *
  11. *  Add __stdargs for dofinger
  12. *
  13. ****************************************************************************/
  14.  
  15.  
  16. #include <stdio.h>
  17. #include <string.h>
  18. #include "global.h"
  19. #include "mbuf.h"
  20. #include "socket.h"
  21. #include "session.h"
  22. #include "proc.h"
  23. #include "netuser.h"
  24. #include "commands.h"
  25. #include "tty.h"
  26.  
  27. int __stdargs dofinger(argc,argv,p)
  28. int argc;
  29. char *argv[];
  30. void *p;
  31. {
  32.     struct sockaddr_in sock;
  33.     char *cp;
  34.     int s,i;
  35.     struct mbuf *bp;
  36.     struct session *sp;
  37.  
  38.     /* Allocate a session descriptor */
  39.     if((sp = newsession(argv[1],FINGER)) == NULLSESSION){
  40.         tprintf("Too many sessions\n");
  41.         keywait(NULLCHAR,1);
  42.         return 1;
  43.     }
  44.     sp->ttystate.echo = sp->ttystate.edit = 0;
  45.     sp->flowmode = 1;
  46.     sock.sin_family = AF_INET;
  47.     sock.sin_port = IPPORT_FINGER;
  48.     for(i=1;i<argc;i++){
  49.         cp = strrchr(argv[i],'@');
  50.         if(cp == NULLCHAR){
  51.             tprintf("%s: local names not supported\n",argv[i]);
  52.             continue;
  53.         }
  54.         *cp++ = '\0';
  55.         tprintf("%s@%s -- ",argv[i],cp);
  56.         tprintf("Resolving %s... ",cp);
  57.         if((sock.sin_addr.s_addr = resolve(cp)) == 0){
  58.             tprintf("Host %s unknown\n",cp);
  59.             continue;
  60.         }
  61.         tprintf("trying %s",psocket((struct sockaddr *)&sock));
  62.         if((sp->s = s = socket(AF_INET,SOCK_STREAM,0)) == -1){
  63.             tprintf("Can't create socket\n");
  64.             break;
  65.         }
  66.         sockmode(s,SOCK_ASCII);
  67.         if(connect(s,(char *)&sock,sizeof(sock)) == -1){
  68.             cp = sockerr(s);
  69.             tprintf(" -- Connect failed: %s\n",cp != NULLCHAR ? cp : "");
  70.             close_s(s);
  71.             sp->s = -1;
  72.             continue;
  73.         }
  74.         tprintf("\n");
  75.         usprintf(s,"%s\n",argv[i]);
  76.         usflush(Curproc->output);
  77.         while(recv_mbuf(s,&bp,0,NULLCHAR,(int *)0) > 0){
  78.             send_mbuf(Curproc->output,bp,0,NULLCHAR,0);
  79.         }
  80.         close_s(s);
  81.         sp->s = -1;
  82.     }
  83.     keywait(NULLCHAR,1);
  84.     freesession(sp);
  85.     return 0;
  86. }
  87.